#include "../common/common.h"
//#define __K_MEANS_DEBUG__
#ifndef __K_MEANS_HEADER__
#define __K_MEANS_HEADER__

class kmeansCluster
{
 public:
  kmeansCluster() ;
  ~kmeansCluster() ;
  
  void readDataFromPath(const char * , const char *) ;
  void trainKmeans(const char * _positivePath,const char * _negetivePath, int _kCount,int _clusterIterator, const char * _kmeansModelFile) ;
  void getHistogramBykmeans(const char * _inFile, const char * _outFile) ;
  void saveKmeansModel(const char * _kmeansFile) ;
  void loadKmeansModel(const char * _kmeansFile) ;
  void getHistogramFromPath(const char*, const char*);
 private:
  void getFileFromPath(const char* _path, std::vector<std::string>& _fileVector) ;
  float distance(float*,float*,int n) ;
  void updateCenter();
  bool testResult();
  void kmeansByOpencv();
 public:
  struct node
  {
    float * data ;
    int indexCluster ;
  }; 
  struct ClusterCenter 
  {
    float * data ;
    float * preData ;
    int clusterCount ;
  };
  node* dataNode ; // 
  int dataHeight ;  // 数据的规模
  int dataWidth ; // 数据的维度
  ClusterCenter* clusterCenter ; // 聚类中心点
  int kCount ; // k
  float * dataArray ; // 实际数据存储的位置
  float * minData ; // 每一维最小的值
  float * maxData ; // 每一维最大的值 做归一化用


 private:
  int clusterIterator ;
  float threasholdCluster ;
};


#endif
